package Annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Target;



//@Target
//最常用的元注解是@Target
//使用@Target可以定义Annotation能够被应用于源码的哪些位置：
//类或接口：ElementType.TYPE；
//字段：ElementType.FIELD；
//方法：ElementType.METHOD；
//构造方法：ElementType.CONSTRUCTOR/；
//方法参数：ElementType.PARAMETER。
//例如，定义注解@Report可用在方法上，我们必须添加一个@Target(ElementType.METHOD)：
@Target(ElementType.METHOD)
public @interface Anno {
    /*
    @Check(min=0,max=100,value=55)
    public  int n;
    */
    int type() default 0;
    String level() default "info";
    String value() default "";
}
//@Retention
//另一个重要的元注解@Retention定义了Annotation的生命周期：
//仅编译期：RetentionPolicy.SOURCE
//仅class文件：RetentionPolicy.CLASS
//运行期：RetentionPolicy.RUNTIME
//使用@Repeatable这个元注解可以定义Annotation是否可重复。

//使用@Inherited定义子类是否可继承父类定义的Annotation
//@Inherited仅针对@Target(ElementType.TYPE)类型的annotation有效，并且仅针对class的继承，对interface的继承无效：
//通常必须设置@Target(ElementType.TYPE)，@Retention(RetentionPolicy.RUNTIME)，一般不用@Inherited和@Repeatable